// webpack的打包过程自定制
// 在这个文件中，应该导出一个包含了自定义配置选项的对象
module.exports = {
  // 声明配置节点（chain），指向一个function，用config来接收默认的webpack配置对象
  chainWebpack: config => {
    // 判断当前编译模式，满足执行后面的回调
    // 发布模式
    config.when(process.env.NODE_ENV === 'production', config => {
      // 清空默认的打包入口，新增自己的打包入口
      config.entry('app').clear().add('./src/main-prod.js')

      // 配置 externals节点，指向一个对象
      // key包名，只要声明了key，打包期间就不会把对应的包合并到输出的文件中
      // 会从window查找val对象
      config.set('externals', {
        vue: 'Vue',
        'vue-router': 'VueRouter',
        axios: 'axios',
        lodash: '_',
        echarts: 'echarts',
        nprogress: 'NProgress',
        'vue-quill-editor': 'VueQuillEditor'
      })

      // 找到html插件，用.tap修改这个插件的固定配置项，args可以拿到当前html里的相关参数
      config.plugin('html').tap(args => {
        // 添加参数isProd
        args[0].isProd = true
        return args
      })
    })
    // 开发模式
    config.when(process.env.NODE_ENV === 'development', config => {
      config.entry('app').clear().add('./src/main-dev.js')

      config.plugin('html').tap(args => {
        args[0].isProd = false
        return args
      })
    })
  }
}
